package com.currentbp.Interesting.likou.cannot;

import org.junit.Test;

/**
 * @author baopan
 * @createTime 2024/3/18 23:10
 */
public class T1531getLengthOfOptimalCompression {
    /*
行程长度编码 是一种常用的字符串压缩方法，它将连续的相同字符（重复 2 次或更多次）替换为字符和表示字符计数的数字（行程长度）。
例如，用此方法压缩字符串 "aabccc" ，将 "aa" 替换为 "a2" ，"ccc" 替换为` "c3" 。因此压缩后的字符串变为 "a2bc3" 。
注意，本问题中，压缩时没有在单个字符后附加计数 '1' 。
给你一个字符串 s 和一个整数 k 。你需要从字符串 s 中删除最多 k 个字符，以使 s 的行程长度编码长度最小。
请你返回删除最多 k 个字符后，s 行程长度编码的最小长度 。
示例 1：
输入：s = "aaabcccd", k = 2
输出：4
解释：在不删除任何内容的情况下，压缩后的字符串是 "a3bc3d" ，长度为 6 。最优的方案是删除 'b' 和 'd'，这样一来，压缩后的字符串为 "a3c3" ，长度是 4 。
示例 2：
输入：s = "aabbaa", k = 2
输出：2
解释：如果删去两个 'b' 字符，那么压缩后的字符串是长度为 2 的 "a4" 。
示例 3：
输入：s = "aaaaaaaaaaa", k = 0
输出：3
解释：由于 k 等于 0 ，不能删去任何字符。压缩后的字符串是 "a11" ，长度为 3 。
     */

    /*
    解题思路：
    1、先全部压缩后得到字符串'aXbYcZ',其中a、b、c为字符,X、Y、Z为数字
    2、尝试去掉一个字符，
     */
    @Test
    public void t1() {
        System.out.println(getLengthOfOptimalCompression("aaabcccd", 2));
        System.out.println(getLengthOfOptimalCompression("aabbaa", 2));
        System.out.println(getLengthOfOptimalCompression("aaaaaaaaaaa", 0));
    }

    public int getLengthOfOptimalCompression(String s, int k) {
        String originStr = zipString(s);
        System.out.println(originStr);
        return 0;
    }

    private String zipString(String s) {
        if (s == null || s.length() <= 1) {
            return s;
        }
        s+="-";
        String result = "";
        char currentChar = s.charAt(0);
        int sum = 1;
        for (int i = 1; i < s.length(); i++) {
            if (currentChar == s.charAt(i)) {
                sum++;
            } else {
                result += (currentChar + "" + (sum == 1 ? "" : sum));
                sum = 1;
                currentChar = s.charAt(i);
            }

        }
        return result;
    }
}
